package com.xs.designpattern;

import java.util.Objects;

/**
 * @author xs
 */
public class Request {
    /**
     * 此请求的类型，由链中的每个项目使用，以查看它们是否应该或可以处理此特定请求
     */
    private final RequestType requestType;

    /**
     * 请求的描述
     */
    private final String requestDescription;

    /**
     * 指示请求是否被处理。请求只能将状态从未处理切换到已处理，无法“取消处理”请求
     */
    private boolean handled;

    /**
     * 创建给定类型和随附描述的新请求
     *
     * @param requestType        请求类型
     * @param requestDescription 请求的描述
     */
    public Request(final RequestType requestType, final String requestDescription) {
        this.requestType = Objects.requireNonNull(requestType);
        this.requestDescription = Objects.requireNonNull(requestDescription);
    }

    /**
     * 获取请求的描述
     *
     * @return 可读的请求描述
     */
    public String getRequestDescription() {
        return requestDescription;
    }

    /**
     * 获取此请求的类型，指挥链中的每个人都使用该类型来查看他们是否应该或可以处理此特定请求
     *
     * @return The request type
     */
    public RequestType getRequestType() {
        return requestType;
    }

    /**
     * 将请求标记为已处理
     */
    public void markHandled() {
        this.handled = true;
    }

    /**
     * 指示该请求是否被处理
     *
     * @return <tt>true</tt> 请求被处理, <tt>false</tt> 请求没有处理
     */
    public boolean isHandled() {
        return this.handled;
    }
}
